package com.yusvn.scm.goods.buhuo.controller;

import com.alibaba.fastjson.JSONObject;
import com.jfinal.aop.Inject;
import com.jfinal.ext.cors.EnableCORS;
import com.jfinal.kit.Kv;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Record;
import com.yusvn.scm.common.BaseController;
import com.yusvn.scm.common.kit.MyKit;
import com.yusvn.scm.common.kit.RetKit;
import com.yusvn.scm.goods.buhuo.service.ScmBuhuoMdbhService;

import java.util.List;
import java.util.Map;


/**
 * 门店补货
 *
 * @author liugz
 */
@EnableCORS
public class ScmBuhuoMdbhController extends BaseController {

    @Inject
    ScmBuhuoMdbhService srv;

    public void index() {
        renderJson();
    }

    /**
     * 获取商品动态属性对应表
     */
    public void selectAllAttrib() {
        renderJson(srv.selectAllAttrib());
    }
    
    /**
     * 获取某个商品属性
     */
    public void selctAttribById() {
        Kv kv = MyKit.jsonStrToKv(getRawData(), true);
        if (kv.isEmpty()) {
            kv = getKv();
        }
        renderJson(srv.selctAttribById(kv));
    }
    
    /**
     * 表1 获取门店补货商品
     */
    public void getMdbhsp() {
//		Kv kv = jsonStrToKv(getRawData());
        Kv kv = MyKit.jsonStrToKv(getRawData(), false); //兼容excel表格的复制，即会将字符的空格、制表符、换行、回车替换为英文逗号，从而分割为多个参数
        if (kv.isEmpty()) {
            kv = getKv();
        }
        // 获取当前登录用户
        kv.set("userid", getLoginUserId());
        kv.set("userCode", getLoginErpUsercode());

        renderJson(RetKit.ok().setData(srv.getMdbhsp(kv)));
    }

    /**
     * 获取本次补货明细
     */
    public void getMdbhmx() {
        Kv kv = MyKit.jsonStrToKv(getRawData(), false);
        if (kv.isEmpty()) {
            kv = getKv();
        }
        // 获取当前登录用户
        kv.set("userid", getLoginUserId());
        kv.set("userCode", getLoginErpUsercode());
        
        List<Record> recPage = srv.getMdbhmx(kv);
        renderJson(RetKit.ok().setData(recPage));
    }
    
    /**
     * 获取某个商品的颜色尺码，用于新增
     */
    public void getSpyscm() {
        Kv kv = MyKit.jsonStrToKv(getRawData(), true);
        if (kv.isEmpty()) {
            kv = getKv();
        }
        // 获取当前登录用户
        kv.set("userid", getLoginUserId());
        kv.set("userCode", getLoginErpUsercode());
        
        renderJson(RetKit.ok().setData(srv.getSpyscm(kv)));
    }

    /**
     * 获取某个商品补货数据， 用于修改补货数量
     */
    public void getBhJybh() {
        Kv kv = MyKit.jsonStrToKv(getRawData(), true);
        if (kv.isEmpty()) {
            kv = getKv();
        }
        // 获取当前登录用户
        kv.set("userid", getLoginUserId());
        kv.set("userCode", getLoginErpUsercode());
        
        renderJson(RetKit.ok().setData(srv.getBhJybh(kv)));
    }

    /**
     * 修改门店补货实际数量
     */
    public void upudateBhjg() {
    	Kv kv = getKv();
    	if(kv.isEmpty()) {
    		//替代MyKit.jsonStrToKv(getRawData(), true) 方法(因字符参数有逗号会把参数转为数组的问题)。 后期写到MyKit中 TODO
    		String jsonStr = getRawData();
    		JSONObject jsonObj = null;
    		try {
    			jsonObj = JSONObject.parseObject(jsonStr);
                for (Map.Entry entry : jsonObj.entrySet()) {
                	// 排除值不为空,或空数组空对象
                	if(StrKit.notNull(entry.getValue()) 
                			&& !"[]".equals(entry.getValue().toString()) 
                			&& !"{}".equals(entry.getValue().toString()) ) {
                		kv.set(entry.getKey(), entry.getValue());
                	}
                }
    		}catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    	
        // 获取当前登录用户
        kv.set("userid", getLoginUserId());
        kv.set("userCode", getLoginErpUsercode());
        
        renderJson(srv.upudateBhjg(kv));
    }
    
    /**
     * 新增门店补货
     */
    public void insertMdbh() {
        Kv kv = MyKit.jsonStrToKv(getRawData(), true);
        if (kv.isEmpty()) {
            kv = getKv();
        }
        // 获取当前登录用户
        kv.set("userid", getLoginUserId());
        kv.set("userCode", getLoginErpUsercode());
        
        renderJson(srv.insertMdbh(kv));
    }

    /**
     * 批量删除不需要补货的商品
     */
    public void deleteMdbhIds() {
    	Kv kv = getKv();
        // 获取当前登录用户
        kv.set("userid", getLoginUserId());
        kv.set("userCode", getLoginErpUsercode());
    	
        renderJson(srv.deleteMdbhBatch(getRawData(), kv));
    }

    /**
     * 门店提交
     */
    public void commitBh() {
    	Kv kv = getKv();
    	if(kv.isEmpty()) {
    		//替代MyKit.jsonStrToKv(getRawData(), true) 方法(因字符参数有逗号会把参数转为数组的问题)。 后期写到MyKit中 TODO
    		String jsonStr = getRawData();
    		JSONObject jsonObj = null;
    		try {
    			jsonObj = JSONObject.parseObject(jsonStr);
                for (Map.Entry entry : jsonObj.entrySet()) {
                	// 排除值不为空,或空数组空对象
                	if(StrKit.notNull(entry.getValue()) 
                			&& !"[]".equals(entry.getValue().toString()) 
                			&& !"{}".equals(entry.getValue().toString()) ) {
                		kv.set(entry.getKey(), entry.getValue());
                	}
                }
    		}catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    	
        // 获取当前登录用户
        kv.set("userid", getLoginUserId());
        kv.set("userCode", getLoginErpUsercode());
        try {
			renderJson(srv.commitBh(kv));
		} catch (Exception e1) {
			e1.printStackTrace();
			renderJson(RetKit.fail("提交失败"));
		}
    }

    /**
     * 取消提交
     */
    public void cancellation() {
        Kv kv = MyKit.jsonStrToKv(getRawData(), true);
        if (kv.isEmpty()) {
            kv = getKv();
        }
        // 获取当前登录用户
        kv.set("userid", getLoginUserId());
        kv.set("userCode", getLoginErpUsercode());

        try {
			RetKit ret = srv.cancellation(kv);
			renderJson(ret );
		} catch (Exception e1) {
			e1.printStackTrace();
			renderJson(RetKit.fail("取消提交失败"));
		}
    }
    
    /**
     * 门店确认某商品补货
     */
    public void mdbhQrsp() {
        Kv kv = MyKit.jsonStrToKv(getRawData(), true);
        if (kv.isEmpty()) {
            kv = getKv();
        }
        // 获取当前登录用户
        //kv.set("userid", getLoginUserId());
        kv.set("userCode", getLoginErpUsercode());

        try {
			RetKit ret = srv.mdbhQrsp(kv);
			renderJson(ret );
		} catch (Exception e1) {
			e1.printStackTrace();
			renderJson(RetKit.fail("确认失败"));
		}
    }
    
    /**
     * 获取补货进度、补货时间
     */
    public void getBhsj() {
        Kv kv = MyKit.jsonStrToKv(getRawData(), true);
        if (kv.isEmpty()) {
            kv = getKv();
        }
        // 获取当前登录用户
        kv.set("userid", getLoginUserId());
        kv.set("userCode", getLoginErpUsercode());

        Record rec = srv.getBhsj(kv);
        renderJson(RetKit.ok().setData(rec));
    }
    /**
     * 获取门店修改补货数量原因
     */
    public void dtbhxgbz() {

        List<Record> rec = srv.dtbhxgbz();
        renderJson(RetKit.ok().setData(rec));
    }
    /**
     * 获取门店提交最后日期
     */
    public void getZhtjsj(){
        Kv kv = jsonStrToKv(getRawData());
        if (kv.isEmpty()) {
            kv = getKv();
        }
        // 获取当前登录用户
        //kv.set("userid", getLoginUserId());
        kv.set("userCode", getLoginErpUsercode());
        List<Record> rec = srv.getZhtjsj(kv);
        renderJson(RetKit.ok().setData(rec));
    }

    /**
     * 新增停补商品
     */
    public void insertTbsp(){
        Kv kv = MyKit.jsonStrToKv(getRawData(), true);
        if (kv.isEmpty()) {
            kv = getKv();
        }
        // 获取当前登录用户
        kv.set("userid", getLoginUserId());
        kv.set("userCode", getLoginErpUsercode());

        renderJson(srv.insertTbsp(kv));
    }

    /**
     *门店提交详情
     */
    public void mdtjxq(){
        Kv kv = MyKit.jsonStrToKv(getRawData(), true);
        if (kv.isEmpty()) {
            kv = getKv();
        }
        // 获取当前登录用户
        kv.set("userid", getLoginUserId());
        kv.set("userCode", getLoginErpUsercode());

        renderJson(srv.mdtjxq(kv));
    }

    /**
     *门店表二保存
     */
    public void xgbzClick(){
//        Kv kv = MyKit.jsonStrToKv(getRawData(), true);
//        if (kv.isEmpty()) {
//            kv = getKv();
//        }
        Kv kv = getKv();
        if(kv.isEmpty()) {
            //替代MyKit.jsonStrToKv(getRawData(), true) 方法(因字符参数有逗号会把参数转为数组的问题)。 后期写到MyKit中 TODO
            String jsonStr = getRawData();
            JSONObject jsonObj = null;
            try {
                jsonObj = JSONObject.parseObject(jsonStr);
                for (Map.Entry entry : jsonObj.entrySet()) {
                    // 排除值不为空,或空数组空对象
                    if(StrKit.notNull(entry.getValue())
                            && !"[]".equals(entry.getValue().toString())
                            && !"{}".equals(entry.getValue().toString()) ) {
                        kv.set(entry.getKey(), entry.getValue());
                    }
                }
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
        // 获取当前登录用户
        kv.set("userid", getLoginUserId());
        kv.set("userCode", getLoginErpUsercode());

        renderJson(srv.xgbzClick(kv));
    }


    /**
     * 门店查询补货明细历史记录
     */
    public void selectBhmxLsjl(){
        Kv kv = jsonStrToKv(getRawData()); //优先Request Payload的传值
        if(kv.isEmpty()) {
            kv = getKv();
        }
        kv.set("userid", getLoginUserId());
        kv.set("userCode", getLoginErpUsercode());
        renderJson(srv.selectBhmxLsjl(kv));
    }
}

